package domain;

import java.util.Date;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Entity;
import javax.persistence.Index;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.Valid;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;

import org.hibernate.validator.constraints.NotBlank;
import org.springframework.format.annotation.DateTimeFormat;

@Entity
@Access(AccessType.PROPERTY)
@Table(indexes = {@Index(columnList = "tipo"), @Index(columnList = "estado")})
public class Cuota extends DomainEntity {

	private Date fecha;
	private double importe;
	private String tipo;
	private String estado;

	public Cuota() {
		super();
	}

	@NotNull
	@Past
	@Temporal(TemporalType.TIMESTAMP)
	@DateTimeFormat(pattern = "dd/MM/yyyy HH:mm")
	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	@Digits(integer = 6, fraction = 2)
	@Min(0)
	public double getImporte() {
		return importe;
	}

	public void setImporte(double importe) {
		this.importe = importe;
	}

	@NotBlank
	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	@NotBlank
	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	
	//Relaciones
	
	private Vecino vecino;
	private ComunidadDeVecinos comunidadDeVecinos;

	@Valid
	@NotNull
	@ManyToOne(optional = false)
	public Vecino getVecino() {
		return vecino;
	}

	public void setVecino(Vecino vecino) {
		this.vecino = vecino;
	}
	
	@Valid
	@NotNull
	@ManyToOne(optional = false)
	public ComunidadDeVecinos getComunidadDeVecinos() {
		return comunidadDeVecinos;
	}

	public void setComunidadDeVecinos(ComunidadDeVecinos comunidadDeVecinos) {
		this.comunidadDeVecinos = comunidadDeVecinos;
	}

}
